/**
 * 用户信息接口
 */
export interface User {
  /** 用户唯一标识 */
  id: string;
  /** 用户姓名 */
  name: string;
  /** 用户头像URL（可选） */
  avatar?: string;
  /** 用户邮箱（可选） */
  email?: string;
}

/**
 * 任务状态常量
 */
export const TaskStatus = {
  /** 未开始 */
  NOT_STARTED: 'not_started',
  /** 进行中 */
  IN_PROGRESS: 'in_progress',
  /** 已完成 */
  COMPLETED: 'completed',
} as const;

export type TaskStatus = typeof TaskStatus[keyof typeof TaskStatus];

// 这行代码用于从常量对象自动生成“值联合类型”，保持值与类型同步，减少出错与重复。
// export type TaskStatus = 'todo' | 'doing' | 'done';
// export const TaskStatus = {
//   Todo: 'todo',
//   Doing: 'doing',
//   Done: 'done',
// } as const;

// export type TaskStatus = typeof TaskStatus[keyof typeof TaskStatus];
// // => 'todo' | 'doing' | 'done'

// 不这样写  就得写成这样
// export type TaskStatus = 'not_started' | 'in_progress' | 'completed';

// export const TaskStatus = {
//   NOT_STARTED: 'not_started',
//   IN_PROGRESS: 'in_progress',
//   COMPLETED: 'completed',
// } as const satisfies Record<string, TaskStatus>;

// 或者
// export enum TaskStatus {
//   NOT_STARTED = 'not_started',
//   IN_PROGRESS = 'in_progress',
//   COMPLETED = 'completed',
// }
// 优点：使用清晰（TaskStatus.NOT_STARTED）
// 缺点：有运行时代码；不如字面量联合易 tree-shake

/**
 * 任务优先级常量
 */
export const TaskPriority = {
  /** 低优先级 */
  LOW: 'low',
  /** 中优先级 */
  MEDIUM: 'medium',
  /** 高优先级 */
  HIGH: 'high',
  /** 紧急 */
  URGENT: 'urgent',
} as const;

export type TaskPriority = typeof TaskPriority[keyof typeof TaskPriority];

/**
 * 子任务接口
 */
export interface SubTask {
  /** 子任务唯一标识 */
  id: string;
  /** 子任务标题 */
  title: string;
  /** 是否已完成 */
  completed: boolean;
  /** 创建时间 */
  createdAt: string;
  /** 更新时间 */
  updatedAt: string;
}

/**
 * 任务卡片接口
 */
export interface TaskCard {
  /** 卡片唯一标识 */
  id: string;
  /** 卡片标题 */
  title: string;
  /** 卡片描述（可选） */
  description?: string;
  /** 卡片内容（可选） */
  content?: string;
  /** 创建时间 */
  createdAt: string;
  /** 更新时间 */
  updatedAt: string;
}

/**
 * 任务接口
 * 包含任务的所有基本信息和关联数据
 */
export interface Task {
  /** 任务唯一标识 */
  id: string;
  /** 任务标题 */
  title: string;
  /** 任务描述（可选） */
  description?: string;
  /** 任务状态 */
  status: TaskStatus;
  /** 任务优先级 */
  priority: TaskPriority;
  /** 任务负责人（可选） */
  assignee?: User;
  /** 任务创建者 */
  creator: User;
  /** 开始时间（可选） */
  startDate?: string;
  /** 截止时间（可选） */
  dueDate?: string;
  /** 所属里程碑（可选） */
  milestone?: string;
  /** 创建时间 */
  createdAt: string;
  /** 更新时间 */
  updatedAt: string;
  /** 所属分组ID */
  groupId: string;
  /** 子任务列表 */
  subTasks: SubTask[];
  /** 关联卡片列表 */
  cards: TaskCard[];
  /** 标签列表（可选） */
  tags?: string[];
  /** 任务进度百分比 (0-100) */
  progress: number;
}

/**
 * 任务分组接口
 * 用于组织和管理任务的容器
 */
export interface TaskGroup {
  /** 分组唯一标识 */
  id: string;
  /** 分组标题 */
  title: string;
  /** 分组颜色（可选） */
  color?: string;
  /** 分组排序顺序 */
  order: number;
  /** 分组内的任务列表 */
  tasks: Task[];
  /** 创建时间 */
  createdAt: string;
  /** 更新时间 */
  updatedAt: string;
}

/**
 * 项目接口
 * 包含项目的所有信息和组织结构
 */
export interface Project {
  /** 项目唯一标识 */
  id: string;
  /** 项目标题 */
  title: string;
  /** 项目描述（可选） */
  description?: string;
  /** 任务分组列表 */
  groups: TaskGroup[];
  /** 项目成员列表 */
  members: User[];
  /** 项目创建者 */
  creator: User;
  /** 创建时间 */
  createdAt: string;
  /** 更新时间 */
  updatedAt: string;
}

/**
 * 筛选选项接口
 * 用于任务的多维度筛选
 */
export interface FilterOptions {
  /** 按状态筛选 */
  status?: TaskStatus[];
  /** 按优先级筛选 */
  priority?: TaskPriority[];
  /** 按负责人筛选 */
  assignee?: string[];
  /** 按里程碑筛选 */
  milestone?: string[];
  /** 按开始时间范围筛选 */
  startDate?: [string, string];
  /** 按截止时间范围筛选 */
  dueDate?: [string, string];
  /** 按标题搜索 */
  search?: string;
}

/**
 * 排序选项接口
 */
export interface SortOptions {
  /** 排序字段 */
  field: 'title' | 'status' | 'priority' | 'dueDate' | 'createdAt' | 'updatedAt';
  /** 排序顺序 */
  order: 'asc' | 'desc';
}

/**
 * 项目管理状态接口
 * Redux store 中项目模块的状态结构
 */
export interface ProjectState {
  /** 所有项目列表 */
  projects: Project[];
  /** 当前选中的项目 */
  currentProject: Project | null;
  /** 加载状态 */
  loading: boolean;
  /** 错误信息 */
  error: string | null;
  /** 当前筛选条件 */
  filters: FilterOptions;
  /** 当前排序设置 */
  sort: SortOptions;
  /** 视图模式：我创建的 / 我参与的 */
  viewMode: 'my_created' | 'my_participated';
}
